package ve.ucv.patologiaocular.showcase;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import ve.ucv.patologiaocular.dao.ProyectoDAO;
import ve.ucv.patologiaocular.dao.ProyectoDAOImpl;
import ve.ucv.patologiaocular.domain.Proyecto;

import com.opensymphony.xwork2.ActionSupport;

public class ListarProyecto extends ActionSupport {

	private static final long serialVersionUID = 3177644093750664176L;
	private static final Log log = LogFactory.getLog(ListarProyecto.class);
	private ProyectoDAO proyectoDAO = null;
	private List<Proyecto> gridModel;
	private List<Proyecto> proyectos;
	private Integer rows = 0;
	private Integer page = 0;
	private Integer total = 0;
	private Integer records = 0;
	private boolean loadonce = false;
	private String nombre;
	private String tipo;
	private String fechaCreado;
	
	public String execute() {
		log.debug("Page " + getPage()+" Rows " + getRows());
	    this.proyectoDAO = new ProyectoDAOImpl();
	    
	    if(nombre == null && tipo == null && fechaCreado == null){
	    	proyectos = proyectoDAO.listarProyectos();
	    }
	    else{
	    	proyectos = proyectoDAO.buscarProyecto(nombre, tipo, fechaCreado);
	    }
	    
	    setRecords(proyectos.size());

	    int to = (getRows() * getPage());
	    int from = to - getRows();

	    if (to > getRecords()) to = getRecords();

	    if (loadonce)
	    {
	      setGridModel(proyectos);
	    }
	    else
	    {
	    	 setGridModel(proyectoDAO.obtenerProyectos(proyectos, from, to));
	    }
	    
	    setTotal((int) Math.ceil((double) getRecords() / (double) getRows()));
		
		return SUCCESS;
	}
	
	public String getJSON()
	{
	    return execute();
	}

	public ProyectoDAO getProyectoDAO() {
		return proyectoDAO;
	}

	public void setProyectoDAO(ProyectoDAO proyectoDAO) {
		this.proyectoDAO = proyectoDAO;
	}

	public List<Proyecto> getGridModel() {
		return gridModel;
	}

	public void setGridModel(List<Proyecto> gridModel) {
		this.gridModel = gridModel;
	}

	public List<Proyecto> getProyectos() {
		return proyectos;
	}

	public void setProyectos(List<Proyecto> proyectos) {
		this.proyectos = proyectos;
	}

	public Integer getRows() {
		return rows;
	}

	public void setRows(Integer rows) {
		this.rows = rows;
	}

	public Integer getPage() {
		return page;
	}

	public void setPage(Integer page) {
		this.page = page;
	}

	public Integer getTotal() {
		return total;
	}

	public void setTotal(Integer total) {
		this.total = total;
	}

	public Integer getRecords() {
		return records;
	}

	public void setRecords(Integer records) {
		this.records = records;
		
		if (this.records > 0 && this.rows > 0)
	    {
	      this.total = (int) Math.ceil((double) this.records / (double) this.rows);
	    }
	    else
	    {
	      this.total = 0;
	    }
	}

	public boolean isLoadonce() {
		return loadonce;
	}

	public void setLoadonce(boolean loadonce) {
		this.loadonce = loadonce;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public String getFechaCreado() {
		return fechaCreado;
	}

	public void setFechaCreado(String fechaCreado) {
		this.fechaCreado = fechaCreado;
	}
}
